package cn.iocoder.yudao.module.erp.convert.deppurchaseitem;

import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.controller.admin.deppurchaseitem.vo.DepPurchaseItemRespVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.deppurchaseitem.DepPurchaseItemDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpSupplierDO;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.Map;

@Mapper
public interface DepPurchaseItemConvert {

    DepPurchaseItemConvert INSTANCE = Mappers.getMapper(DepPurchaseItemConvert.class);


    default List<DepPurchaseItemRespVO> convertList(List<DepPurchaseItemDO> list, Map<Long, ErpSupplierDO> supplierMap) {

        return CollectionUtils.convertList(list, depPurchaseItemDO -> convert(depPurchaseItemDO, supplierMap.get(depPurchaseItemDO.getSupplierId())));
    }

    default DepPurchaseItemRespVO convert(DepPurchaseItemDO depPurchaseItemDO,  ErpSupplierDO erpSupplierDO) {
        DepPurchaseItemRespVO depPurchaseItemRespVO = BeanUtils.toBean(depPurchaseItemDO, DepPurchaseItemRespVO.class);
        if (erpSupplierDO != null) {
            depPurchaseItemRespVO.setSupplierName(erpSupplierDO.getName());
        }
        return depPurchaseItemRespVO;
    }

    default List<DepPurchaseItemRespVO> convertList1(List<DepPurchaseItemDO> list, Map<Long, DeptRespDTO> deptMap,Map<Long, ErpSupplierDO> supplierMap) {

        return CollectionUtils.convertList(list, depPurchaseItemDO -> convert1(depPurchaseItemDO, deptMap.get(depPurchaseItemDO.getDeptId()),supplierMap.get(depPurchaseItemDO.getSupplierId())));
    }

    default DepPurchaseItemRespVO convert1(DepPurchaseItemDO depPurchaseItemDO, DeptRespDTO deptRespDTO,ErpSupplierDO erpSupplierDO) {
        DepPurchaseItemRespVO depPurchaseItemRespVO = BeanUtils.toBean(depPurchaseItemDO, DepPurchaseItemRespVO.class);
        if (deptRespDTO != null) {
            depPurchaseItemRespVO.setDeptName(deptRespDTO.getName());
        }
        if (erpSupplierDO != null) {
            depPurchaseItemRespVO.setSupplierName(erpSupplierDO.getName());
        }

        return depPurchaseItemRespVO;
    }
}
